The inventions disclosed herein relate to the field of graphics processing and, without limitation, the software manipulations that bring graphics requests from an application to the rendering or presenting hardware.
Graphics processing units (GPUs) have become important for processing data-parallel graphics tasks. Developers now recognize that non-graphics data-parallel tasks can also be handled by GPUs, taking advantage of their massive parallel capabilities. Vendors and standards organizations have created application programming interfaces (APIs) that make graphics data-parallel tasks easier to program because of the high level of developer programming interaction. However, there are also low-level APIs (or libraries/frameworks etc.) that reside closer to hardware and are generally employed by applying the output of the higher-level APIs. In other words, the higher-level APIs generally simply prepare program code for application to the lower-level APIs.
Given the diversification of graphics programming techniques and the ever-changing capabilities of graphics hardware, every graphics request run through a standard path from the application to the hardware may not be using the very best resources available to reach execution as quickly and efficiently as possible. In addition, due to the relatively fixed and standard nature of the available frameworks, the path of a graphics request may not consider other system status issues or contextual information, which, if known, might influence the choice of path for any particular graphics request.